// iisaccelerator - an iis isapi for upgrade web performance
//
// Copyright (C) 2006-2007 - BlueStone  (bluestn@163.com)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
//////////////////////////////////////////////////////////////////////
#pragma once
#include <windows.h>
#include <stdlib.h>


class CBSFile
{
public:
	CBSFile(void);
	~CBSFile(void);

    HANDLE Detach( );
    HANDLE Attach( HANDLE hNewHandle );
	void Close( );

	BOOL IsOpen( );

	static BOOL CreateFilePath( LPCWSTR lpszFilePath );

    BOOL CreateTempFile( LPCTSTR lpszPath,
                         DWORD dwDesiredAccess,
				         DWORD dwShareMode,
				         DWORD dwCreationDisposition,
				         DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_ARCHIVE,
				         BOOL bAutoCreateDirectory = FALSE,
                         BOOL bAutoDelete = TRUE );

	BOOL OpenFile( LPCTSTR lpszFileName,
				   DWORD dwDesiredAccess,
				   DWORD dwShareMode,
				   DWORD dwCreationDisposition,
				   DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_ARCHIVE,
				   BOOL bAutoCreateDirectory = FALSE );
	BOOL Seek( LONG nOffset, DWORD dwMoveMethod );
	BOOL SeekBegin( );
	BOOL SeekEnd( );

	LONG GetFilePtr( );

	LONG Read( LPBYTE lpBuf, LONG lLen );
	LONG Write( const LPBYTE lpBuf, LONG lLen );

    static LONG GetFileSize( LPCTSTR lpszFilePath );
	LONG GetFileSize( );
	BOOL SetFileSize( int nFileSize, BOOL bKeepFilePtr = TRUE );
	HANDLE GetHandle();

	LPCTSTR GetFileName( );
protected:
    BOOL   m_bTempFile;
    BOOL   m_bAutoDelete;
	HANDLE m_hHandle;
	TCHAR m_lpszFileName[_MAX_PATH];

};
